--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scripts/unify-backend-plain-files.sh v4.7.1-rc.1 (02d14248) Text, 3.72 KB
T8b949e#!/usr/bin/env bash
T8b949e# Make the two per-arch cx_Freeze backend trees compatible with
T8b949e# @electron/universal's merge requirements:
T8b949e#
T8b949e# 1. Every file must exist in BOTH trees (no unique-to-one-arch files).
T8b949e# 2. Every non-Mach-O file must be byte-identical across trees.
T8b949e#
T8b949e# Python bytecode (.pyc inside library.zip) is architecture-independent;
T8b949e# only timestamps and zip metadata cause SHA differences.
Tffa657set -euo pipefail
Te6edf3ROOTTff7b72=Ta5d6ff"Tff7b72$(Tffa657cd Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Te6edf3$0Ta5d6ff"Tff7b72)Ta5d6ff/..Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)Ta5d6ff"
Te6edf3ARM64_DIRTff7b72=Ta5d6ff"Te6edf3$ROOTTa5d6ff/build/exe/darwin-arm64Ta5d6ff"
Te6edf3X64_DIRTff7b72=Ta5d6ff"Te6edf3$ROOTTa5d6ff/build/exe/darwin-x64Ta5d6ff"
Tff7b72if Tff7b72[Tff7b72[ ! -d Ta5d6ff"Te6edf3$ARM64_DIRTa5d6ff" Tff7b72|| ! -d Ta5d6ff"Te6edf3$X64_DIRTa5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"unify-backend: one or both backend dirs missing, skipping"
Tffa657exit T79c0ff0
Tff7b72fi
Te6edf3unifiedTff7b72=T79c0ff0
Te6edf3syncedTff7b72=T79c0ff0
Te6edf3droppedTff7b72=T79c0ff0
Te6edf3normalizedTff7b72=T79c0ff0
copy_missingTff7b72(Tff7b72) Tff7b72{
Tffa657local Te6edf3src_dirTff7b72=Ta5d6ff"Te6edf3$1Ta5d6ff" Te6edf3dst_dirTff7b72=Ta5d6ff"Te6edf3$2Ta5d6ff" Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$3Ta5d6ff"
Tff7b72while Te6edf3IFSTff7b72= Tffa657read -r -d Ta5d6ff'' relTb4b4b4; Tff7b72do
Te6edf3relTff7b72=Ta5d6ff"Tffd700${Te6edf3relTb4b4b4#./Tffd700}Ta5d6ff"
Tff7b72if Tff7b72[Tff7b72[ ! -f Ta5d6ff"Te6edf3$dst_dirTa5d6ff/Te6edf3$relTa5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657local Te6edf3src_fileTff7b72=Ta5d6ff"Te6edf3$src_dirTa5d6ff/Te6edf3$relTa5d6ff"
Tffa657local ft
Te6edf3ftTff7b72=Tff7b72$(file --brief --no-pad Ta5d6ff"Te6edf3$src_fileTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657trueTff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$ftTa5d6ff" Tff7b72=Tff7b72= Mach-O* Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffunify-backend: dropping arch-only Mach-O for consistency: Te6edf3$relTa5d6ff" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff"Ta5d6ff (Te6edf3$labelTa5d6ff); source reports: Te6edf3$ftTa5d6ff" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff" Hint: ensure libyaml is available for x86_64 (arch -x86_64 brew install libyaml)" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff" so PyYAML's C extension compiles for darwin-x64 and both trees match." >Tb4b4b4&T79c0ff2
rm -f Ta5d6ff"Te6edf3$src_fileTa5d6ff"
Te6edf3droppedTff7b72=Tff7b72$((Te6edf3dropped Tff7b72+ T79c0ff1Tff7b72))
Tff7b72continue
Tff7b72fi
mkdir -p Ta5d6ff"Te6edf3$dst_dirTa5d6ff/Tff7b72$(dirname Ta5d6ff"Te6edf3$relTa5d6ff"Tff7b72)Ta5d6ff"
cp Ta5d6ff"Te6edf3$src_fileTa5d6ff" Ta5d6ff"Te6edf3$dst_dirTa5d6ff/Te6edf3$relTa5d6ff"
Tffa657echo Ta5d6ff"Ta5d6ff synced (Te6edf3$labelTa5d6ff): Te6edf3$relTa5d6ff"
Te6edf3syncedTff7b72=Tff7b72$((Te6edf3synced Tff7b72+ T79c0ff1Tff7b72))
Tff7b72fi
Tff7b72done < <Tff7b72(Tffa657cd Ta5d6ff"Te6edf3$src_dirTa5d6ff" Tff7b72&& find . -type f -print0Tff7b72)
Tff7b72}
copy_missing Ta5d6ff"Te6edf3$ARM64_DIRTa5d6ff" Ta5d6ff"Te6edf3$X64_DIRTa5d6ff" Ta5d6ff"arm64 -> x64"
copy_missing Ta5d6ff"Te6edf3$X64_DIRTa5d6ff" Ta5d6ff"Te6edf3$ARM64_DIRTa5d6ff" Ta5d6ff"x64 -> arm64"
Tff7b72while Te6edf3IFSTff7b72= Tffa657read -r -d Ta5d6ff'' relTb4b4b4; Tff7b72do
Te6edf3relTff7b72=Ta5d6ff"Tffd700${Te6edf3relTb4b4b4#./Tffd700}Ta5d6ff"
Te6edf3arm64_fileTff7b72=Ta5d6ff"Te6edf3$ARM64_DIRTa5d6ff/Te6edf3$relTa5d6ff"
Te6edf3x64_fileTff7b72=Ta5d6ff"Te6edf3$X64_DIRTa5d6ff/Te6edf3$relTa5d6ff"
Tff7b72[Tff7b72[ -f Ta5d6ff"Te6edf3$x64_fileTa5d6ff" Tff7b72]Tff7b72] Tff7b72|| Tff7b72continue
Tff7b72if cmp -s Ta5d6ff"Te6edf3$arm64_fileTa5d6ff" Ta5d6ff"Te6edf3$x64_fileTa5d6ff"Tb4b4b4; Tff7b72then
Tff7b72continue
Tff7b72fi
Te6edf3filetypeTff7b72=Tff7b72$(file --brief --no-pad Ta5d6ff"Te6edf3$arm64_fileTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657trueTff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$filetypeTa5d6ff" !Tff7b72= Mach-O* Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
cp Ta5d6ff"Te6edf3$arm64_fileTa5d6ff" Ta5d6ff"Te6edf3$x64_fileTa5d6ff"
Tffa657echo Ta5d6ff"Ta5d6ff unified: Te6edf3$relTa5d6ff"
Te6edf3unifiedTff7b72=Tff7b72$((Te6edf3unified Tff7b72+ T79c0ff1Tff7b72))
Tff7b72continue
Tff7b72fi
Te6edf3x64_filetypeTff7b72=Tff7b72$(file --brief --no-pad Ta5d6ff"Te6edf3$x64_fileTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657trueTff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$x64_filetypeTa5d6ff" Tff7b72=Tff7b72= Mach-O* Tff7b72]Tff7b72] Tff7b72&&
Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$x64_filetypeTa5d6ff" Tff7b72=Tff7b72= *arm64* Tff7b72]Tff7b72] Tff7b72&&
Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$x64_filetypeTa5d6ff" !Tff7b72= *universal* Tff7b72]Tff7b72] Tff7b72&&
Tff7b72[Tff7b72[ Ta5d6ff"Te6edf3$x64_filetypeTa5d6ff" !Tff7b72= *x86_64* Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
cp Ta5d6ff"Te6edf3$arm64_fileTa5d6ff" Ta5d6ff"Te6edf3$x64_fileTa5d6ff"
Tffa657echo Ta5d6ff"Ta5d6ffunify-backend: normalized same-arch Mach-O (arm64 in both trees): Te6edf3$relTa5d6ff" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff" x64 copy replaced with arm64 tree's bytes; @electron/universal" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff" will use x64ArchFiles to skip lipo. For a true universal2 binary," >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff" ensure the x64 Python env compiles with CC=\"clang -arch x86_64\"." >Tb4b4b4&T79c0ff2
Te6edf3normalizedTff7b72=Tff7b72$((Te6edf3normalized Tff7b72+ T79c0ff1Tff7b72))
Tff7b72fi
Tff7b72done < <Tff7b72(Tffa657cd Ta5d6ff"Te6edf3$ARM64_DIRTa5d6ff" Tff7b72&& find . -type f -print0Tff7b72)
Te6edf3totalTff7b72=Tff7b72$((Te6edf3unified Tff7b72+ Te6edf3synced Tff7b72+ Te6edf3normalizedTff7b72))
Tff7b72if Tff7b72[Tff7b72[ Te6edf3$dropped -gt T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffunify-backend: WARNING: dropped Te6edf3$droppedTa5d6ff arch-only Mach-O binary/binaries for consistency (pure Python fallback active)Ta5d6ff"
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Te6edf3$normalized -gt T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffunify-backend: WARNING: normalized Te6edf3$normalizedTa5d6ff same-arch Mach-O file(s) (both trees had arm64; x64ArchFiles will skip lipo)Ta5d6ff"
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Te6edf3$total -gt T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffunify-backend: synced Te6edf3$syncedTa5d6ff missing file(s), unified Te6edf3$unifiedTa5d6ff differing file(s), normalized Te6edf3$normalizedTa5d6ff same-arch file(s)Ta5d6ff"
Tff7b72else
Tffa657echo Ta5d6ff"unify-backend: all files already identical and present in both trees"
Tff7b72fi
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────